<?php
class RegisterHandler {

	private $m_db = null;
	private $validate = null;
	// Kontruktorn till klassen där vi matar in en databas.
	public function __construct(Database $db) {
		$this -> m_db = $db;

		$this -> validate = new Validator();
	}

	// Kollar om namnet redan finns i databasen
	public function DoExists($name) {
		$sqlQuery = "SELECT username FROM login WHERE username = ?";

		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $name);

		if ($this -> m_db -> execute($stmt) > 0) {
			return true;
		}
		return false;

	}

	// Kollar om emailen finns redan i databasen
	public function DoEmailExists($email) {
		$sqlQuery = "SELECT email FROM login WHERE email = ?";

		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $email);

		if ($this -> m_db -> execute($stmt) > 0) {
			return true;
		}
		return false;

	}
	// tar bort person via namnet då namnet är unikt
	public function DeletePerson($name) {
		$sqlQuery = "DELETE FROM login WHERE username = ?";

		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $name);

		$this -> m_db -> execute($stmt);

	}
	// Registrerar användare med namn, lösenord och email
	public function DoRegister($name, $pass, $email) {
		$sqlQuery = "INSERT INTO login(username,password, email) VALUES(?, ?, ?)";
		
		$enrypted_password = md5($pass);
		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('sss', $name, $enrypted_password, $email);

		if ($this -> m_db -> execute($stmt) === 0) {
			return true;
		}
		return false;
	}

	// Kollar om namn är tom
	public function IsEmpty($var) {
		if (empty($var)) {
			return true;
		}
		return false;
	}
	// kollar om lösenordet stämmer överens med valideringen
	public function validatePass($pass) {
		if ($this -> validate -> validatePassword($pass)) {
			return true;
		}
		return false;
	}
	// kollar så namnet är 3 tecken eller mer
	public function nameLessThanThree($name) {
		if (strlen($name) < 3) {
			return true;
		}
		return false;
	}
	// validerar emailen så det är en email
	public function validateEmail($email) {
		if ($this -> validate -> validateEmail($email)) {
			return true;
		}
		return false;
	}
	// testar de
	public function TestRegister()
	{
		
		// Kollar om strängen är tom
		$testString = "bäver";
		if($this->IsEmpty($testString))
		{
			echo "Vi mata in ordet \"Bäver\", men är ändå tomt, ett fel uppstod";
			return false;
		}
		
		// Kollar om strängen är tom
		$testString = null;
		if($this->IsEmpty($testString) === false){
			echo "Vi mata in en tom sträng men retunerar att de är en sträng. ett fel uppstod";
			return false;
		}
		
		// Kollar om validering av email går igenom
		$testString = "tomaswallin@hotmail.com";
		if($this->validateEmail($testString) === false){
			echo "Vi mata in en giltig email-adress men retunera false, ett fel uppstod";
			return false;
		}
		
		// Kollar om validering av email går igenom
		$testString = "bäverText";
		if($this->validateEmail($testString)){
			echo "Vi mata in en ogiltig email-adress men retunera true, ett fel uppstod";
			return false;
		}
		
		// Kollar om texten klarar av minimum text
		$testString = "aa";
		if($this->nameLessThanThree($testString) === false){
			echo "Vi skicka in 2 tecken, men retunera true fastän de minst får vara 3 tecken";
			return false;
		}
		
		// Kollar om texten klarar av minimum text
		$testString = "foo";
		if($this->nameLessThanThree($testString)){
			echo "Vi mata in ett ord som innehöll 3 tecken men går inte igenom fastän 3 tecken är minimum";
			return false;
		}
		
		// Kollar om lösenordet klarar av valideringen
		$testString = "bäver";
		if($this->validatePass($testString)){
			echo "Vi mata in 5 tecken då minimum är 6, men går ändå igenom";
			return false;
		}
		
		// Kollar om lösenordet klarar av valideringen
		$testString = "Bäver123";
		if($this->validatePass($testString)){
			echo "Vi mata in ett giltigt lösenord men retunera false.";
			return false;
		}
		
		// Tar bort personen Erik utefall han redan finns
		$this->DeletePerson("Erik");
		
		// Kollar om Erik finns
		if($this->DoExists("Erik") === true)
		{
			echo "Personen borde inte finnas kvar";
			return false; 
		}
		
		// Registrerar en användare 
		if($this->DoRegister("Erik", "123456", "kalleanka@hotmail.com") === false){
			echo "Erik ska finnas nu";
			return false;
		}
		
		// Kollar om emailen finns
		if($this->DoEmailExists("kalleanka@hotmail.com") === false){
			echo "Denna email bör finnas";
			return false;
		} 
		
		// Tar bort Erik
		$this->DeletePerson("Erik");
		
		// Kollar om emailen finns
		if($this->DoEmailExists("kalleanka@hotmail.com")){
			echo "Denna email bör inte finnas längre";
			return false;
		} 
		// Kollar så Erik finns
		if($this->DoExists("Erik") === true)
		{
			echo "Namnet bör inte finnas men de gör det ändå";
			return false;
		}

		return true;
		
	}

}
?>